//const bytes = require('bytes');
const multer = require('multer');
const fs = require('fs');
const fse = require('fs-extra')
const utils = require('./utils');
const config = require('../config');
var Promise = require('bluebird');

// 配置multer
const storage = multer.memoryStorage()
const upload = multer({
    storage: storage,
    // limits: {
    //     fileSize: bytes('2MB') // 限制文件在4MB以内
    // },
    fileFilter: function (req, files, callback) {
        // 只允许上传jpg|png|jpeg|gif格式的文件
        var type = '|' + files.mimetype.slice(files.mimetype.lastIndexOf('/') + 1) + '|';
        var fileTypeValid = '|jpg|png|jpeg|gif|bmp|json|'.indexOf(type) !== -1;
        callback(null, !!fileTypeValid);
    }
});


// 使用硬盘存储模式设置存放接收到的文件的路径以及文件名
var diskStorage = multer.diskStorage({
    destination: function (req, file, cb) {
        // 接收到文件后输出的保存路径（若不存在则需要创建）
        cb(null, 'upload/');
    },
    filename: function (req, file, cb) {
        // 将保存文件名设置为 时间戳 + 文件原始名，比如 151342376785-123.jpg
        cb(null, Date.now() + "-" + file.originalname);
    }
});

// 创建文件夹
var createFolder = function (folder) {
    try {
        // 测试 path 指定的文件或目录的用户权限,我们用来检测文件是否存在
        // 如果文件路径不存在将会抛出错误"no such file or directory"
        fs.accessSync(folder);
    } catch (e) {
        // 文件夹不存在，以同步的方式创建文件目录。
        fs.mkdirSync(folder);
    }
};

var uploadFolder = './upload/';
createFolder(uploadFolder);

// 创建 multer 对象
var json_uploader = multer({
    storage: diskStorage
});

// 这里`image`对应前端中input的name值
module.exports = {
    upLoadImage: function (req, res) {
        var folderid = req.headers.fid;
        upload.single("file")(req, res, function (err) {
            if (err) return console.error(err);
            if (req.file && req.file.buffer) {
                //获取源文件后缀名
                var fileFormat = (req.file.originalname).split(".");
                //var dir = rootdir;
                var rootdir = config.rootdir + folderid;
                var resourcename = utils.generalUUID();
                //文件命名
                var filePath = rootdir + '\\' + resourcename + "." + fileFormat[fileFormat.length - 1];

                fse.ensureDir(rootdir, err => {
                    fse.writeFile(filePath, req.file.buffer, {
                            flag: 'a'
                        })
                        .then(function () {
                            console.log(new Date() + '  [uploaded] ' + filePath);

                            //计算文件md5值
                            // utils.readFileMd5(filePath).then(function (data) {
                            //     console.log(data);
                            // }, function (error) {
                            //     console.error(error)
                            // });

                            //保存至resource表

                            return res.json({
                                "code": 0,
                                "msg": "上传成功",
                                "data": {
                                    "src": filePath,
                                    'resourcename': resourcename + '.' + fileFormat[1],
                                    'folderid': folderid
                                }
                            });
                        })
                        .catch(function (err) {
                            console.error(err);
                            return res.json({
                                "code": 1,
                                "msg": "上传失败",
                                "data": {
                                    "src": ""
                                }
                            });
                        })
                })
            }
        });
    },
    uploadjson: function (req, res) {
        return new Promise(function (resolve, reject) {
            json_uploader.single("file")(req, res, function (err) {
                if (err) {
                    console.error(err);
                    reject({
                        "code": 1,
                        "msg": "上传失败"
                    });
                }
                if (req.file) {
                    //获取源文件后缀名
                    //var fileFormat = (req.file.originalname).split(".");
                    var data = fs.readFileSync(req.file.path);
                    try {
                        data = JSON.parse(data);
                        resolve(data);
                    } catch (error) {
                        reject({
                            "code": 1,
                            "msg": "数据格式不正确"
                        });
                    }

                } else {
                    reject({
                        "code": 1,
                        "msg": "上传失败"
                    });
                }
            });
        });

    }
}